package edu.uba.fcen.estimacion.estimacion.graphics;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
import org.apache.log4j.Logger;

import edu.uba.fcen.estimacion.estimacion.Estimacion;
import edu.uba.fcen.estimacion.estimacion.EstimacionData;
import edu.uba.fcen.estimacion.estimacion.Means;

public class CoverageVsCantPalabras {

	private static final Logger logger = Logger.getLogger(CoverageVsCantPalabras.class);
	/**
	 * @param args 1ro - el path al csv donde estan los valores de las medias
	 * 			   2do - el path al directorio de ciao 
	 * 			   3ro - la cantidad de palabras completas que hay en la base en el momento de la ejecución
	 * 
	 * Luego en R graficar con 
	 * plot(x, coverage, type="o", col="blue", ylim=c(0,50), main=paste("Cubrimiento"), xlab=paste("Cant. de palabras"), ylab=paste("Porcentaje de cubrimiento"))
	 */
	public static void main(String[] args) {
		String pathToCSV = args[0];
		String pathToCiaoDirectory = args[1];
		int limitDatabase = Integer.parseInt(args[2]);
		
		File directoryBase = new File(pathToCiaoDirectory);
		StringBuilder coverageBuilder = new StringBuilder();
		StringBuilder cantPalabrasBuilder = new StringBuilder();
		
		cantPalabrasBuilder.append("x = c(");
		coverageBuilder.append("coverage = c(");
		for (int i = 50; i < limitDatabase; i+=50) {
			Estimacion estimacion = new Estimacion(pathToCSV, i);
			cantPalabrasBuilder.append(i).append(",");
			coverageBuilder.append(IterateOverFileSet(estimacion, directoryBase)).append(",");
			System.out.println("Pasada con " + i + " palabras completada!");
			estimacion.closeDB();
		}
	
		System.out.println(cantPalabrasBuilder.toString());
		System.out.println(coverageBuilder.toString());
	}
	
	private static double IterateOverFileSet(Estimacion estimacion, File directoryBase) {
		EstimacionData data;
		DescriptiveStatistics coverages = new DescriptiveStatistics();
		
		for(File directory : directoryBase.listFiles()) {
			if (directory.isDirectory()) {
				logger.info("processing directory: " + directory.getName());
				for(File in : directory.listFiles()) {
					if (in.getName().endsWith(".freeling")) {
						data = estimacion.runOver(in.getAbsolutePath());
						Double coverage = Double.valueOf(data.getCoverage());
						if (!coverage.isNaN()) {
							coverages.addValue(coverage);
						}
					}
				}
			}
		}
		return coverages.getMean() * 100;
	}

}
